package com.chaopei.day08;

import org.omg.CORBA.Object;

import java.io.*;

/**
 * @Author Corday 天涯
 * @Date 2022/3/14 10:28
 * Java输入输出流中的对象存储，重复存储要解决文件头读入的问题，
 * 需要重写对象输入输出流的读写的方法，去掉文件头
 */
public class MyReview {
    //    1.对象的输入，从外部读入到程序中
    public static void readObject() {
        InputStream in = null;
        ObjectInputStream ois = null;
        try {
            in = new FileInputStream("c:/temp/cool.txt");
            ois = new MyObjectInput(in);
            //正确的读取所有对象
            while (true) {//注意位置
                try {
                    String temp = (String) ois.readObject();
                    System.out.println(temp);
                } catch (EOFException e) {
                    //对象读取完成后,中止while循环
                    break;
                }
            }//while
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

    //    2.对象的输出,从程序中保存到磁盘文件中
    public static void saveObject() {
        OutputStream out = null;
        ObjectOutputStream oos = null;
        try {
            //生成文件字节输出流对象，以追加的方式保存数据
            out = new FileOutputStream("c:/temp/cool.txt", true);
            //用自定义对象输出流创建输出流对象
            oos = new MyObjectOutput(out);
            //会加上文件头
            String st1 = new String("ddd");
            String st2 = new String("eee");
            String st3 = new String("fff");
            oos.writeObject(st1);
            oos.writeObject(st2);
            oos.writeObject(st3);
            oos.close();
            out.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

//测试一下
class MyTest {
    public static void main(String[] args) {
        //MyReview.saveObject();
        MyReview.readObject();
    }
}

